unit manutenzioni_frm;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ZDataset, db, ExtCtrls, DBGrids, StdCtrls, EditBtn, datamodule_frm, Grids, articoli_frm;

type

  { Tmanutenzioniform }

  Tmanutenzioniform = class(TForm)
    btelimina: TButton;
    btnuovo: TButton;
    btsalva: TButton;
    btOpenArticolo: TButton;
    btStampaManutenzione: TButton;
    cbArticoli: TComboBox;
    cbpianomanutenzioni: TComboBox;
    chchangegiorno: TCheckBox;
    chCompletato: TCheckBox;
    chviewcompletato: TCheckBox;
    ds_ext: TDatasource;
    edchangegiorno: TDateEdit;
    eddataeseguito: TDateEdit;
    eddatascadenza: TDateEdit;
    ds_manutenzioni: TDatasource;
    grigliaext: TDBGrid;
    grigliamanutenzioni: TDBGrid;
    Label1: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    edoperatori: TLabeledEdit;
    lblcbarticoli: TLabel;
    lblNote: TLabel;
    lbl_DataEseguito: TLabel;
    lbl_DataScadenza: TLabel;
    mmNote: TMemo;
    mmNoteArticolo: TMemo;
    Panel1: TPanel;
    pchangegiorno: TPanel;
    panel_listarticoli: TPanel;
    panel_detailmanutenzioni: TPanel;
    panel_grigliamanutenzioni: TPanel;
    rggiudizio: TRadioGroup;
    zq_ext: TZQuery;
    z_manutenzioni: TZReadOnlyQuery;
    z_griglia_manutenzioni: TZReadOnlyQuery;
    procedure bteliminaClick(Sender: TObject);

    procedure btnuovoClick(Sender: TObject);

    procedure btOpenArticoloClick(Sender: TObject);
    procedure btsalvaClick(Sender: TObject);

    procedure btStampaManutenzioneClick(Sender: TObject);

    procedure cbArticoliChange(Sender: TObject);
    procedure cbArticoliExit(Sender: TObject);
    procedure cbArticoliKeyPress(Sender: TObject; var Key: char);
    procedure cblavorazioniChange(Sender: TObject);
    procedure chchangegiornoChange(Sender: TObject);
    procedure chCompletatoChange(Sender: TObject);
    procedure chviewcompletatoChange(Sender: TObject);
    procedure eddatascadenzaChange(Sender: TObject);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure grigliaextDrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);


    procedure grigliamanutenzioniCellClick(Column: TColumn);
    procedure grigliamanutenzioniDblClick(Sender: TObject);
    procedure grigliamanutenzioniDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    procedure LoadComboArticoli();
    procedure Loadgrigliaext();
    procedure LoadComboPiani();


    procedure ClearCampi();
    procedure InsertNextIntervento();
  private
    { private declarations }
  public
    { public declarations }
    idtemplate_sel,idarticolo_sel, idintervento_sel, idpiano_sel:integer;

  end; 

var
  manutenzioniform: Tmanutenzioniform;
  articoli: Tarticoli;

implementation

{ Tmanutenzioniform }


procedure Tmanutenzioniform.FormShow(Sender: TObject);
begin
  //seleziono tutti gli articoli e li visualizzo nella combobox
  LoadComboArticoli();


  cbArticoli.ItemIndex:= cbArticoli.Items.IndexOfObject(TObject(idarticolo_sel));
  LoadComboPiani();
  cbArticoliChange(self);
end;

procedure Tmanutenzioniform.grigliaextDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
    if zq_ext.FieldByName('MOD').AsInteger=1 then
     grigliaext.Canvas.font.Color:=clred;
  grigliaext.DefaultDrawColumnCell(rect,datacol,column, state);
end;


procedure Tmanutenzioniform.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
     CloseAction:=caFree;
end;

procedure Tmanutenzioniform.cbArticoliChange(Sender: TObject);
var i,RecSel:Integer;
begin
    if cbArticoli.ItemIndex<>-1 then
    begin
         idarticolo_sel:=integer(cbArticoli.Items.Objects[cbArticoli.ItemIndex]);
         with z_griglia_manutenzioni do
         begin
              Close;
              sql.Clear;
              sql.Add('SELECT A.IDINTERVENTO, A.TIPOINTERVENTO, A.DATA_SCADENZA,A.DATA_ESEGUITO,A.COMPLETATO,A.NOTE AS NOTEMANUTENZIONE,A.IDPIANO, A.IDARTICOLO, B.NOME, C.NOTE AS NOTEARTICOLO, D.IDTEMPLATE, A.OPERATIVI, A.GIUDIZIO as GIUDIZIO, C.GIUDIZIO as GIUDIZIOARTICOLO');
              sql.Add('FROM INTERVENTI_MANUTENZIONI AS A');
              sql.Add('INNER JOIN ANAGARTICOLI AS C ON A.IDARTICOLO=C.IDARTICOLO ');
              sql.Add('INNER JOIN PIANI_MANUTENZIONI AS B ON A.IDPIANO=B.IDPIANO ');
              sql.Add('INNER JOIN ARTICOLI_PIANIMANUTENZIONE AS D ON A.IDPIANO=D.IDPIANO AND A.IDARTICOLO=D.IDARTICOLO ');
              sql.Add('WHERE A.IDARTICOLO=:ID');
              if (chviewcompletato.Checked=false) then
                  sql.Add('AND A.COMPLETATO=0');

              SQL.Add('ORDER BY A.DATA_SCADENZA ASC, A.IDARTICOLO ASC');
              ParamByName('ID').AsInteger:=idarticolo_sel;
              ExecSQL;
              Open;
              i:=0; RecSel:=0;
              while not EOF do
              begin
                   i:=i+1;
                   if FieldByName('IDINTERVENTO').AsInteger=idintervento_sel then
                      begin
                          RecSel:=i;
                      end;

                   Next;
              end;
              RecNo:=RecSel;
              with grigliamanutenzioni do
              begin
                   Columns[0].Width:=           60;
                   Columns[0].Title.Caption:=   'ID';
                   Columns[0].Visible:=         false;
                   Columns[1].Width:=           60;
                   Columns[1].Title.Caption:=   'Tipo';
                   Columns[2].Width:=           80;
                   Columns[2].Title.Caption:=   'Data Scadenza';
                   Columns[2].Alignment:=        taCenter;
                   Columns[3].Width:=           80;
                   Columns[3].Title.Caption:=   'Data Eseguito';
                   Columns[3].Alignment:=       taCenter;
                   Columns[4].Width:=           50;
                   Columns[4].Title.Caption:=   'Compl.';
                   Columns[5].Visible:=         false;
                   Columns[6].Visible:=         false;
                   Columns[7].Visible:=         false;
                   Columns[8].Width:=           150;
                   Columns[8].Title.Caption:=   'Piano';
                   Columns[8].Alignment:=       taCenter;
                   Columns[9].Visible:=         false;
                   Columns[10].Visible:=         false;
                   Columns[11].Width:=           150;
                   Columns[11].Title.Caption:=   'Operativi';
                   Columns[12].Visible:=         false;
                   Columns[13].Visible:=         false;

              end;
         end;
         if idintervento_sel<>0 then
            grigliamanutenzioniDblClick(self);

    end;
end;

procedure Tmanutenzioniform.cbArticoliExit(Sender: TObject);
begin
  (sender as TComboBox).ItemIndex := (sender as TComboBox).Items.IndexOfObject(TObject((sender as TComboBox).Items.Objects[(sender as TComboBox).ItemIndex])); //(sender as TComboBox).Items.IndexOf((sender as TComboBox).Text);
  (sender as TComboBox).OnChange(self);
end;

procedure Tmanutenzioniform.cbArticoliKeyPress(Sender: TObject; var Key: char);
begin
   if key=#13 then
       SelectNext(sender as twincontrol,true,true);
end;


procedure Tmanutenzioniform.btOpenArticoloClick(Sender: TObject);
begin
     articoli := Tarticoli.Create(self);
     articoli.idarticolo_sel:= idarticolo_sel;
     articoli.Caption:='Anagrafica UTENZE';
     articoli.Show;
end;

procedure Tmanutenzioniform.grigliamanutenzioniCellClick(Column: TColumn);
begin
     grigliamanutenzioniDblClick(self);
end;

procedure Tmanutenzioniform.grigliamanutenzioniDblClick(Sender: TObject);
begin
     idpiano_sel:=z_griglia_manutenzioni.FieldByName('IDPIANO').AsInteger;
     idarticolo_sel:=z_griglia_manutenzioni.FieldByName('IDARTICOLO').AsInteger;
     idintervento_sel:=z_griglia_manutenzioni.FieldByName('IDINTERVENTO').AsInteger;
     idtemplate_sel:=z_griglia_manutenzioni.FieldByName('IDTEMPLATE').AsInteger;
     eddatascadenza.Date:=z_griglia_manutenzioni.FieldByName('DATA_SCADENZA').AsDateTime;
     eddataeseguito.Date:=z_griglia_manutenzioni.FieldByName('DATA_ESEGUITO').AsDateTime;
     cbpianomanutenzioni.ItemIndex:= cbpianomanutenzioni.Items.IndexOfObject(TObject(idpiano_sel));
     edoperatori.Text:= z_griglia_manutenzioni.FieldByName('OPERATIVI').Asstring;
     if z_griglia_manutenzioni.FieldByName('GIUDIZIO').Asinteger = -1 then
        rggiudizio.ItemIndex:=-1
     else
         rggiudizio.ItemIndex:=z_griglia_manutenzioni.FieldByName('GIUDIZIO').Asinteger;
     if z_griglia_manutenzioni.FieldByName('COMPLETATO').AsBoolean then chCompletato.Checked:=true
        else chCompletato.Checked:=false;
     mmNote.Text:=z_griglia_manutenzioni.FieldByName('NOTEMANUTENZIONE').AsString;
     mmNoteArticolo.Text:=z_griglia_manutenzioni.FieldByName('NOTEARTICOLO').AsString;

     Loadgrigliaext();

      with grigliaext do
              begin
                   Columns[0].Width:=           50;
                   Columns[0].Title.Caption:=   'ID';
                   Columns[1].Width:=           450;
                   Columns[1].Title.Caption:=   'Attività';

              end;


end;

procedure Tmanutenzioniform.grigliamanutenzioniDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if z_griglia_manutenzioni.FieldByName('COMPLETATO').AsInteger=1 then
  grigliamanutenzioni.Canvas.Brush.Color:=clred ;
grigliamanutenzioni.DefaultDrawColumnCell(rect,datacol,column,state);
end;

procedure Tmanutenzioniform.btnuovoClick(Sender: TObject);
begin
     //pulisce tutti i campi per consentire un nuovo inserimento
     ClearCampi();
     eddatascadenza.SetFocus;
end;

procedure Tmanutenzioniform.btsalvaClick(Sender: TObject);
var completato_primaupdate : Integer;
    tipointervento : String;
begin
  //controllo che i parametri obbligatori siano inseriti sia
  //per la modifica che per l'inserimento
  if eddatascadenza.Text='' then
  begin
     ShowMessage('Devi indicare la data scadenza dell''intervento.');
     eddatascadenza.SetFocus;
     exit();
  end;
  //Controlli per intervento completato
  if (eddataeseguito.Text='') and (chCompletato.Checked) then
  begin
     ShowMessage('Se imposti l''intervento come completato, devi indicare la data in cui è stato eseguito.');
     eddataeseguito.SetFocus;
     exit();
  end;
  if (eddataeseguito.Text<>'') and (chCompletato.Checked=false) then
  begin
     ShowMessage('Indicando la data di esecuzione dell''intervento di manutenzione devi spuntare la checkbox "Completato".');
     exit();
  end;


  if (eddataeseguito.Text<>'') and (chCompletato.Checked) then
  begin
       if (chchangegiorno.Checked) and (edchangegiorno.Text='') then
       begin
            ShowMessage('Attenzione hai scelto di creare manualmente la data del prossimo intervento, ma non hai indicato la data.');
            edchangegiorno.SetFocus;
            exit();
       end;
   end;

  if (cbpianomanutenzioni.ItemIndex=-1)then
  begin
     ShowMessage('Seleziona un piano manutenzione.');
     cbpianomanutenzioni.SetFocus;
     exit();
  end;


  with z_manutenzioni do
      begin
           Close;
           sql.Clear;
           sql.Add('SELECT TIPOPIANO FROM PIANI_MANUTENZIONI WHERE IDPIANO=:IDPIANO');
           ParamByName('IDPIANO').Asinteger:=integer(cbpianomanutenzioni.Items.Objects[cbpianomanutenzioni.ItemIndex]);
           ExecSQL;
           Open;
           tipointervento:=FieldByName('TIPOPIANO').AsString;

      end;

  // salva tutte le modifiche fatte sui campi nella tabella
  if idintervento_sel<>0  then
  begin
  ////////////////////////////////////////////////////////////////////
  ///              MODIFICA INTERVENTO
  ////////////////////////////////////////////////////////////////////
      with z_manutenzioni do
      begin
           //Guardo come è il campo "completato" prima della modifica
           completato_primaupdate:=z_griglia_manutenzioni.FieldByName('COMPLETATO').AsInteger;
           //Faccio la modifica sul DB
           Close;
           sql.Clear;
           sql.Add('UPDATE INTERVENTI_MANUTENZIONI SET '+
                          'IDDITTA=:IDDITTA,'+
                          'IDARTICOLO=:IDARTICOLO,'+
                          'IDPIANO=:IDPIANO,'+
                          'TIPOINTERVENTO=:TIPOINTERVENTO,'+
                          'DATA_ESEGUITO=:DATA_ESEGUITO,'+
                          'DATA_SCADENZA=:DATA_SCADENZA,'+
                          'DATA_REGISTRAZIONE=:DATA_REGISTRAZIONE,'+
                          'COMPLETATO=:COMPLETATO,'+
                          'OPERATORE=:OPERATORE,'+
                          'NOTE=:NOTE, '+
                          'OPERATIVI=:OPERATIVI, '+
                          'GIUDIZIO=:GIUDIZIO '+
                          'WHERE IDINTERVENTO=:ID');
           ParamByName('ID').AsInteger:=idintervento_sel;
           ParamByName('IDDITTA').AsInteger:=DataModule1.idditta;
           ParamByName('IDARTICOLO').Asinteger:=integer(cbArticoli.Items.Objects[cbArticoli.ItemIndex]);
           ParamByName('IDPIANO').Asinteger:=integer(cbpianomanutenzioni.Items.Objects[cbpianomanutenzioni.ItemIndex]);
           ParamByName('TIPOINTERVENTO').AsString:=tipointervento;
           if eddataeseguito.Text='' then  ParamByName('DATA_ESEGUITO').IsNull
              else ParamByName('DATA_ESEGUITO').AsDate:=StrToDate(eddataeseguito.Text);
           ParamByName('DATA_SCADENZA').AsDate:=StrToDate(eddatascadenza.Text);
           ParamByName('DATA_REGISTRAZIONE').asDate:=Date;
           if chCompletato.Checked then ParamByName('COMPLETATO').AsInteger:=1
              else ParamByName('COMPLETATO').AsInteger:=0;
           ParamByName('OPERATORE').AsString:=DataModule1.username;
           ParamByName('NOTE').AsString:=mmNote.Text;
           ParamByName('OPERATIVI').AsString:=edoperatori.Text;
           ParamByName('GIUDIZIO').AsInteger:=rggiudizio.ItemIndex;
           ExecSQL;
           //comunica l'esito positivo dell'inserimento
           ShowMessage('L''intervento con scadenza '+eddatascadenza.Text+ ' è stato modificato correttamente.');
      end;
  end
  else
  begin
            ////////////////////////////////////////////////////////////////////
            ///              INSERIMENTO INTERVENTO
            ////////////////////////////////////////////////////////////////////
            //inserisci il nuovo soggetto nel DB
            with z_manutenzioni do
            begin
                 //Variabile che serve solo per la modifica.. Per un inserimento la metto a zero per
                 //far si che l'inserimento del prossimo intervento venga solo se la checkbox viene spuntata
                 completato_primaupdate:=0;
                 Close;
                 sql.Clear;
                 sql.Add('INSERT INTO INTERVENTI_MANUTENZIONI ('+
                     'IDDITTA,'+
                     'IDARTICOLO,'+
                     'IDPIANO,'+
                     'TIPOINTERVENTO,'+
                     'DATA_ESEGUITO,'+
                     'DATA_SCADENZA,'+
                     'DATA_REGISTRAZIONE,'+
                     'COMPLETATO,'+
                     'OPERATORE,'+
                     'OPERATIVI, '+
                     'GIUDIZIO, '+
                     'NOTE'+
                     ') VALUES (:IDDITTA,:IDARTICOLO,:IDPIANO,:TIPOINTERVENTO,:DATA_ESEGUITO,:DATA_SCADENZA,:DATA_REGISTRAZIONE,:COMPLETATO,:OPERATORE,:OPERATIVI,:GIUDIZIO,:NOTE)');
                 ParamByName('IDDITTA').AsInteger:=DataModule1.idditta;
                 ParamByName('IDARTICOLO').Asinteger:=integer(cbArticoli.Items.Objects[cbArticoli.ItemIndex]);
                 ParamByName('IDPIANO').Asinteger:=integer(cbpianomanutenzioni.Items.Objects[cbpianomanutenzioni.ItemIndex]);
                 ParamByName('TIPOINTERVENTO').AsString:=tipointervento;
                 if eddataeseguito.Text='' then  ParamByName('DATA_ESEGUITO').isnull
                    else ParamByName('DATA_ESEGUITO').AsDate:=StrToDate(eddataeseguito.Text);
                 ParamByName('DATA_SCADENZA').AsDate:=StrToDate(eddatascadenza.Text);
                 ParamByName('DATA_REGISTRAZIONE').asDate:=Date;
                 if chCompletato.Checked then ParamByName('COMPLETATO').AsInteger:=1
                    else ParamByName('COMPLETATO').AsInteger:=0;
                 ParamByName('OPERATORE').AsString:=DataModule1.username;
                 ParamByName('NOTE').AsString:=mmNote.Text;
                 ParamByName('OPERATIVI').AsString:=edoperatori.Text;
           ParamByName('GIUDIZIO').AsInteger:=rggiudizio.ItemIndex;
                 ExecSQL;
                 //comunica l'esito positivo dell'inserimento
                 ShowMessage('L''intervento con scadenza '+eddatascadenza.Text+ ' è stato inserito correttamente.');
            end;
       end;
       with z_manutenzioni do
            begin;
                  //aggiorno il campo note sull'articolo
                 Close;
                 sql.Clear;
                 sql.Add('UPDATE ANAGARTICOLI SET '+
                          'NOTE=:NOTE, '+
                          'GIUDIZIO=:GIUDIZIO '+
                          'WHERE IDARTICOLO=:IDARTICOLO');
                 ParamByName('IDARTICOLO').Asinteger:=integer(cbArticoli.Items.Objects[cbArticoli.ItemIndex]);
                 ParamByName('NOTE').AsString:=mmNoteArticolo.Text;
                 ParamByName('GIUDIZIO').AsInteger:=rggiudizio.ItemIndex;
                 ExecSQL;
            end;
       //Se la modifica consiste nel mettere a completato l'intervento chiedo se si vuole inserire un nuovo record
       if chCompletato.Checked and (completato_primaupdate=0) then
          InsertNextIntervento();

       //riaggiorna la lista degli inetrventi nella griglia
       cbArticoliChange(self);

       btnuovoClick(self);
end;

procedure Tmanutenzioniform.bteliminaClick(Sender: TObject);
var
  buttonSelected : Integer;
begin
   //CONTROLLI
   if idintervento_sel=0  then
  begin
        ShowMessage('Per eliminare un intervento è necessario prima selezionarne uno dalla lista.');
        exit();
   end;

    buttonSelected := MessageDlg('Si sta per eliminare l''intervento con data scadenza '+eddatascadenza.Text+'. Continuare?',mtInformation, mbOKCancel, 0);
    if buttonSelected = mrOK     then
    begin
         with z_manutenzioni do
         begin
              Close;
              sql.Clear;
              sql.Add('DELETE FROM INTERVENTI_MANUTENZIONI WHERE IDINTERVENTO=:ID');
              ParamByName('ID').AsInteger:=idintervento_sel;
              ExecSQL;
         end;
         cbArticoliChange(self);
         //pulisce tutti i campi
         ClearCampi();
    end
end;

procedure Tmanutenzioniform.btStampaManutenzioneClick(Sender: TObject);
begin



with DataModule1.zq_report2 do
     begin
          close;
          sql.clear;
          sql.add('SELECT * FROM ANAGARTICOLI_EXT '+
                  'WHERE IDARTICOLO=:ARTICOLO ' +
                  'ORDER BY gruppo');
                  ParamByName('ARTICOLO').AsInteger:=idarticolo_sel;
          ExecSQL;
          Open;
     end;

with DataModule1.zq_rep4 do
     begin
            close;
            sql.clear;
            sql.add('(SELECT IDARTICOLO,IDPIANO,A.IDTEMPLATE,NOME_CAMPO,VALORE ' +
                    'FROM INTERVENTI_TEMPL_DATA AS A, ARTICOLI_PIANIMANUTENZIONE AS B ' +
                    'WHERE A.IDTEMPLATE=B.IDTEMPLATE '+
                    'UNION '+
                    'SELECT A.IDARTICOLO,A.IDPIANO,IDTEMPLATE,NOME_CAMPO,VALORE ' +
                    'FROM INTERVENTI_EXT AS A, ARTICOLI_PIANIMANUTENZIONE AS B ' +
                    'WHERE A.IDARTICOLO=B.IDARTICOLO AND A.IDPIANO=B.IDPIANO '+
                    'AND OPERAZIONE=1) '+
                    'EXCEPT '+
                    'SELECT A.IDARTICOLO,A.IDPIANO,IDTEMPLATE,NOME_CAMPO,VALORE '+
                    'FROM INTERVENTI_EXT AS A, ARTICOLI_PIANIMANUTENZIONE AS B ' +
                    'WHERE A.IDARTICOLO=B.IDARTICOLO AND A.IDPIANO=B.IDPIANO '+
                    'AND OPERAZIONE=0 '+
                    'ORDER BY NOME_CAMPO');

            ExecSQL;
            open;
       end;



//STAMPO LE ELETTROPOMPE E UTENZE VARIE
with DataModule1.zq_report1 do
     begin
          close;
          sql.clear;
          sql.add('SELECT MAN.*,ART.*,PIA.IDTEMPLATE, CATE.NOME AS NOMECAT, CATE2.IDCATEGORIA AS CATEGORIANON');
          sql.Add('FROM ((ANAGARTICOLI AS ART');
          sql.add('INNER JOIN ARTICOLI_CAT AS CAT ON ART.IDARTICOLO = CAT.IDARTICOLO ');
          sql.add('INNER JOIN CATEGORIE AS CATE ON CAT.IDCATEGORIA = CATE.IDCATEGORIA AND CATE.GERARCHICA=1 )');
          sql.add('INNER JOIN INTERVENTI_MANUTENZIONI AS MAN ON MAN.IDARTICOLO = ART.IDARTICOLO ');
          sql.add('INNER JOIN ARTICOLI_PIANIMANUTENZIONE AS PIA ON MAN.IDPIANO = PIA.IDPIANO AND MAN.IDARTICOLO = PIA.IDARTICOLO) ');
          sql.add('INNER JOIN ARTICOLI_CAT AS CAT2 ON ART.IDARTICOLO = CAT2.IDARTICOLO ');
          sql.add('INNER JOIN CATEGORIE AS CATE2 ON CAT2.IDCATEGORIA = CATE2.IDCATEGORIA AND CATE2.GERARCHICA=0');
          sql.add('WHERE MAN.IDINTERVENTO =:INTERVENTO ');
          ParamByName('INTERVENTO').AsInteger:=idintervento_sel;
          ExecSQL;
          Open;
     end;
 case DataModule1.zq_report1.fieldbyname('CATEGORIANON').asinteger    of
 1,2:begin
      datamodule1.frReport1.loadfromfile(ProgramDirectory+'report_utenza.lrf');
      datamodule1.frReport1.ShowReport;
 end;
 4,5:begin
        datamodule1.frReport1.loadfromfile(ProgramDirectory+'report_utenza2.lrf');
  datamodule1.frReport1.ShowReport;
 end;

3:begin
      datamodule1.frReport1.loadfromfile(ProgramDirectory+'report_utenza3.lrf');
  datamodule1.frReport1.ShowReport;
end;

6:begin
      datamodule1.frReport1.loadfromfile(ProgramDirectory+'report_utenza4.lrf');
  datamodule1.frReport1.ShowReport;
end;

end;


end;














procedure Tmanutenzioniform.cblavorazioniChange(Sender: TObject);
begin

end;

procedure Tmanutenzioniform.chchangegiornoChange(Sender: TObject);
begin
  if chchangegiorno.Checked then
     edchangegiorno.Enabled:=true
  else
     edchangegiorno.Enabled:=false;
end;

procedure Tmanutenzioniform.chCompletatoChange(Sender: TObject);
begin
  if chCompletato.Checked then
     pchangegiorno.Visible:=true
  else
      pchangegiorno.Visible:=false;
end;

procedure Tmanutenzioniform.chviewcompletatoChange(Sender: TObject);
begin
  cbArticoliChange(self);
end;

procedure Tmanutenzioniform.eddatascadenzaChange(Sender: TObject);
begin
  btsalva.Enabled:=true;
end;


procedure Tmanutenzioniform.ClearCampi();
 begin
  chCompletato.Checked:=false;
  cbpianomanutenzioni.ClearSelection;
  eddatascadenza.Clear;
  eddataeseguito.Clear;
  mmNote.Clear;
  btsalva.Enabled:=false;
  idintervento_sel:=0;
  zq_ext.Close;


  chchangegiorno.Checked:=false;
  edchangegiorno.Enabled:=false;
  edoperatori.Clear;
  rggiudizio.ItemIndex:=-1;
end;


procedure Tmanutenzioniform.Loadgrigliaext();
begin
  with zq_ext do
       begin
            close;
            sql.clear;
            sql.add('(SELECT NOME_CAMPO,VALORE,MOD=0,IDINTERVENTO_EXT=null ' +
                    'FROM INTERVENTI_TEMPL_DATA ' +
                    'WHERE IDTEMPLATE=:IDTEMPL '+
                    'UNION '+
                    'SELECT NOME_CAMPO,VALORE,MOD=1,IDINTERVENTO_EXT ' +
                    'FROM INTERVENTI_EXT ' +
                    'WHERE IDARTICOLO=:IDART '+
                    'AND OPERAZIONE=1 '+
                    'AND IDPIANO=:IDPIA) '+
                    'EXCEPT '+
                    'SELECT NOME_CAMPO,VALORE,MOD=0,IDINTERVENTO_EXT=null '+
                    'FROM INTERVENTI_EXT ' +
                    'WHERE IDARTICOLO=:IDART '+
                    'AND OPERAZIONE=0 '+
                    'AND IDPIANO=:IDPIA '+
                    'ORDER BY NOME_CAMPO');
            ParamByName('IDTEMPL').AsInteger:=idtemplate_sel;
            ParamByName('IDART').AsInteger:=idarticolo_sel;
            ParamByName('IDPIA').AsInteger:=idpiano_sel;
            ExecSQL;
            open;
       end;
  with grigliaext do
       begin
            Columns[0].Width:=           150;
            Columns[0].Title.Caption:=   'Nome';
            Columns[1].Width:=           150;
            Columns[1].Title.Caption:=   'Valore';
       end;


end;

procedure Tmanutenzioniform.LoadComboArticoli();
begin
//svuota combo
cbArticoli.Clear;
with z_manutenzioni do
        begin
             Close;
             sql.Clear;
             sql.Add('SELECT IDARTICOLO, NOME FROM ANAGARTICOLI');
             ExecSQL;
             Open;
             while not EOF do
             begin
                  cbArticoli.Items.AddObject(FieldByName('NOME').AsString,TObject(FieldByName('IDARTICOLO').AsInteger));
                  Next;
             end;
        end
end;



procedure Tmanutenzioniform.LoadComboPiani();
begin
cbpianomanutenzioni.Clear;
with z_manutenzioni do
     begin
          close;
          sql.clear;
          sql.add('SELECT A.IDPIANO, B.NOME ' +
                  'FROM ARTICOLI_PIANIMANUTENZIONE AS A INNER JOIN PIANI_MANUTENZIONI AS B ON A.IDPIANO=B.IDPIANO '+
                  'WHERE A.IDARTICOLO=:IDART');
          ParamByName('IDART').AsInteger:=integer(cbArticoli.Items.Objects[cbArticoli.ItemIndex]);
          ExecSQL;
          Open;
           while not EOF do
             begin
                  cbpianomanutenzioni.Items.AddObject(FieldByName('NOME').AsString,TObject(FieldByName('IDPIANO').AsInteger));
                  Next;
             end;
     end;
end;



procedure Tmanutenzioniform.InsertNextIntervento();
var
  buttonSelected,intervallo : Integer;
  nextDATAIntervento : TDate;
  tipointervento:String;
begin
    //Trova il piano manutenzioni dell'articolo
     with z_manutenzioni do
     begin
          Close;
          sql.Clear;
          sql.Add('SELECT INTERVALLO, UM_INTERVALLO FROM PIANI_MANUTENZIONI ');
          //sql.Add('INNER JOIN ANAGARTICOLI AS ART ON PIANI.IDPIANO = ART.IDPIANOMANUTENZIONE');
          sql.Add('WHERE IDPIANO = :ID');
          ParamByName('ID').AsInteger:=idpiano_sel;
          ExecSQL;
          Open;
          //Inserisce un nuovo intervento in base al piano di manutenzione solo se è stato associato un piano di manutenzione
          //Se non lo trova vuol dire che non c'è e esce dalla funzione
          if RecordCount>0 then
          begin
               case FieldByName('UM_INTERVALLO').AsInteger  of
                    0 : intervallo:= FieldByName('INTERVALLO').AsInteger;  //giorni
                    1 : intervallo:= FieldByName('INTERVALLO').AsInteger*30;  //mesi
                    2 : intervallo:= FieldByName('INTERVALLO').AsInteger*365;  //anni
                    else intervallo:= FieldByName('INTERVALLO').AsInteger; //giorni
               end;
          end
          else exit();
     end;
     if chchangegiorno.Checked then
          nextDATAIntervento:=edchangegiorno.Date
     else
          nextDATAIntervento:=StrToDate(eddataeseguito.Text)+intervallo;

     buttonSelected := MessageDlg('Vuoi inserire il prossimo intervento, che secondo il piano di manutenzione associato all''articolo avrà scadenza il : '+
                       DateToStr(nextDATAIntervento) + '?',mtInformation, mbOKCancel, 0);
     if buttonSelected = mrOK     then
     begin
      with z_manutenzioni do
      begin
           Close;
           sql.Clear;
           sql.Add('SELECT TIPOPIANO FROM PIANI_MANUTENZIONI WHERE IDPIANO=:IDPIANO');
           ParamByName('IDPIANO').Asinteger:=integer(cbpianomanutenzioni.Items.Objects[cbpianomanutenzioni.ItemIndex]);
           ExecSQL;
           Open;
           tipointervento:=FieldByName('TIPOPIANO').AsString;
      end;

     with z_manutenzioni do
          begin
               Close;
               sql.Clear;
               sql.Add('INSERT INTO INTERVENTI_MANUTENZIONI ('+
                       'IDDITTA,'+
                       'IDPIANO, ' +
                       'IDARTICOLO,'+
                       'TIPOINTERVENTO,'+
                       'DATA_SCADENZA,'+
                       'DATA_REGISTRAZIONE,'+
                       'COMPLETATO,'+
                       'OPERATORE,'+
                       'NOTE'+
                       ') VALUES (:IDDITTA,:IDPIANO,:IDARTICOLO,:TIPOINTERVENTO,:DATA_SCADENZA,:DATA_REGISTRAZIONE,:COMPLETATO,:OPERATORE,:NOTE)');
               ParamByName('IDDITTA').AsInteger:=DataModule1.idditta;
               ParamByName('IDARTICOLO').Asinteger:=idarticolo_sel;
               ParamByName('IDPIANO').Asinteger:=idpiano_sel;
               ParamByName('TIPOINTERVENTO').AsString:=tipointervento;
               ParamByName('DATA_SCADENZA').AsDate:=nextDATAIntervento;
               ParamByName('DATA_REGISTRAZIONE').asDate:=Date;
               ParamByName('COMPLETATO').AsInteger:=0;
               ParamByName('OPERATORE').AsString:=DataModule1.username;
               ParamByName('NOTE').AsString:='Intervento inserito automaticamente il ' + DateToStr(Date);
               ExecSQL;
               //riaggiorna la lista degli inetrventi nella griglia
               cbArticoliChange(self);
               //comunica l'esito positivo dell'inserimento
               ShowMessage('L''intervento con scadenza '+DateToStr(nextDATAIntervento)+ ' è stato inserito correttamente.');
          end;
               end;

end;

initialization
  {$I manutenzioni_frm.lrs}

end.

